17-4 pくBzvT

在前一小節已經說明,資料庫包含資料表,不同資料表之間的欄位可以有關聯姓,以保證資料的完整性和一致性。本小節說明如何在 Access 資料庫設定資料庫關聯後,進一步設定關聯對於資料的新增、修改、刪除的影響。

本節將以 asp/example/database/song03.mdb 的資料庫來說明。開啟此資料庫後,點選「資料庫工具/資料庫關聯圖」,可以看到 song 和 singer 資料表之間已經有關聯存在:

點選關聯線段後,可以開啟「編輯關聯」畫面,我們可以勾選「強迫參考完整性」,但不勾選「串聯更新關聯欄位」和「串聯刪除關聯記錄」,如下:

此時資料庫關聯圖已被修改,如下:

其中關聯線端的兩端分別被加上「1」和「∞」,代表這兩個欄位的關聯是「一對多」,也就是一個歌星可以唱很多首歌,但是一首歌只能有一個歌星來唱。Access 是根據 song 資料表的「序號」是不可重複的主索引,因此自動決定這個關聯是「一對多關聯」。

此時打開 singer 資料表,可以看到每筆資料都有一個「+」號,畫面如下:

表示此資料表是「父資料表」,不可任意刪除資料,否則將會影響到「子資料表」,也就是 song 資料表。例如,我們可以點選包含「張惠妹」的記錄的正號,顯示如下:

由上述畫面可以知道,「張惠妹」這筆資料和 song 資料表的三筆記錄有關聯,這三筆資料分別是「聽海」、「牽手」、「原來你什麼都不要」。如果我們要刪掉 singer 資料表中「張惠妹」的這筆資料,Access 會顯示錯誤訊息「因為 'song' 資料表包含相關的記錄,故無法刪除或變更此記錄」,這表示系統不允許使用者刪除「張惠妹」此筆資料,因為若直接刪除此筆資料,會使得 song 資料表中的「聽海」、「牽手」、「原來你什麼都不要」三筆資料變成孤兒,找不到對應的歌手,這就是勾選「強迫參考完整性」的效果,會保持資料的完整性。

若我們執意要刪除父資料表中的記錄,並對於相關聯的子資料表的記錄也希望一併刪除,那我們就可以勾選「重疊顯示刪除相關記錄」(新版是「串聯刪除關聯記錄」),此時使用者只要刪除 singer 資料表的「張惠妹」這筆資料,系統即會一併刪除 song 資料表中的「聽海」、「牽手」、「原來你什麼都不要」三筆資料。

若我們要修改父資料表中的某一個關聯欄位,並對於相關聯的子資料表的記錄也希望能自動一併修改,那我們就可以勾選「重疊顯示更新相關欄位」(新版是「串聯更新關聯欄位」),即可達到此功能,讀者可以自行試看看。


JScript 程式設計與應用:用於伺服器端的 ASP 環境